package media_proc

import (
	"vrcm/src/vrcm/cmd/migrate/migration/models"
	common "vrcm/src/vrcm/common/models"
)

type InsertMergeScreenReq struct {
	Id           int                 `json:"-" comment:""` //
	TaskName     string              `json:"task_name" comment:"任务名"`
	TemplateType int                 `json:"template_type" comment:"模版 1双视窗 2四宫格 3六分格 4八分格 5九宫格 6十六宫格"`
	TaskId       string              `json:"task_id";comment:"任务id"`
	MergeTaskId  string              `json:"merge_task_id";comment:"合屏任务id"`
	TaskState    int                 `json:"task_state";comment:"监看状态"`
	StreamType   int                 `json:"stream_type";comment:"输入类型 1ip 2 rtc"`
	OutType      int                 `json:"out_type";comment:"输入类型 1udp 2rtmp 3trc"`
	OutUrl       string              `json:"out_url" comment:"输入地址"`
	TemplateId   int                 `json:"template_id" comment:"转码模版id"`
	Configs      []MergeScreenConfig `json:"configs" comment:"配置信息"`
	SceneInfo    string              `json:"scene_info" comment:"主场景信息"`
	EventId      string              `json:"event_id" comment:"活动号"`
	TenantId     string              `json:"tenant_id"comment:"任务id"`
	common.ControlBy
}

type MergeScreenConfig struct {
	models.Model
	BasicID    int64  `json:"basic_id" gorm:"type:bigint unsigned;comment:合屏id"`
	ViewNo     int    `json:"view_no" gorm:"type:int;comment:视窗号"`
	ViewName   string `json:"view_name" gorm:"type:varchar(50);comment:视窗号"`
	InputType  int    `json:"input_type" gorm:"type:tinyint;comment:输入类型 1udp 2rtmp"`
	InputUrl   string `json:"input_url" gorm:"type:varchar(50);comment:输入地址"`
	ConfigInfo string `json:"config_info" gorm:"type:varchar(300);comment:视窗参数"`
	ConfigType string `json:"config_type" gorm:"type:varchar(20);comment:视窗类型 camera share"`
	models.ModelTime
	models.ControlBy
}

type StartMergeScreenReq struct {
	Id int `json:"id" comment:""` //
}

type StopMergeScreenReq struct {
	Id int `json:"id" comment:""` //
}

type DeleteMergeScreenReq struct {
	Id int `json:"id" comment:""` //
}

type MergeScreenOutUrlUpdateReq struct {
	Id     int    `json:"id" comment:""` //
	OutUrl string `json:"out_url" comment:"输入地址"`
	common.ControlBy
}

type TransTaskInsertReq struct {
	Id             int                `json:"json" comment:""` //
	TenantId       string             `json:"tenant_id" comment:"租户"`
	TaskName       string             `json:"task_name" comment:"转码任务名称"`
	TemplateId     int                `json:"template_id" comment:"转码模版id"`
	InputType      int                `json:"input_type" comment:"输入类型 1 udp"`
	InputUrl       string             `json:"input_url" comment:"输入地址"`
	OutputType     int                `json:"output_type" comment:"输出类型 1 udp"`
	OutputUrl      string             `json:"output_url" comment:"输出地址"`
	Template       Template           `json:"template"`
	MultiTemplate  MultiTransTemplate `json:"multi_template"`
	CallBackUrl    string             `json:"callBack_url"`
	InDeCodec      int                `json:"in_de_codec" comment:"输入源解码 1 cpu 2gpu 3nvidia"`
	OutCodec       int                `json:"out_codec" comment:"输出源解码 1 cpu 2gpu 3nvidia"`
	Flag           string             `json:"flag" comment:"输出标志"`
	ServerIp       string             `json:"server_ip" comment:"管理地址"`
	DeviceIp       string             `json:"device_ip" comment:"设备id"`
	ServerIps      []IpInfo           `json:"server_ips" comment:"设备地址"`
	TaskId         string             `json:"task_id" comment:"任务id"`
	IsMulti        int                `json:"is_multi" comment:"是否为多转码任务 1是"`
	IsDeinterlace  int                `json:"is_deinterlace"`
	ForceOnline    bool               `json:"forceonline"`
	ScheduleTaskId string             `json:"ScheduleTaskId"`
	common.ControlBy
}

type IpInfo struct {
	ServerIp string `json:"server_ip" comment:"管理地址"`
	DeviceIp string `json:"device_ip" comment:"设备id"`
}

type Template struct {
	Id             string  `json:"id" comment:"模版名称"`
	TemplateName   string  `json:"template_name" comment:"模版名称"`
	VideoCodec     int     `json:"video_codec" comment:"视频编码 1 h264 2h265"`
	Width          int     `json:"width" comment:"宽"`
	High           int     `json:"high" comment:"高"`
	BitrateControl int     `json:"bitrate_control" comment:"码率控制"`
	MaxBitrate     float64 `json:"max_bitrate" comment:"最高码率"`
	AvgBitrate     float64 `json:"avg_bitrate" comment:"平均码率"`
	FrameRate      float64 `json:"frame_rate" comment:"帧率"`
	Frame          int     `json:"frame" comment:"帧结构"`
	Gop            int     `json:"gop" comment:"gop"`
	QualityMode    int     `json:"quality_mode" comment:"质量模式1高"`
	TcodeInsert    int     `json:"tcode_insert" comment:"时码插入 1 1080p"`
	AudioCodec     int     `json:"audio_codec" comment:"音频编码 1 aac 2 opus"`
	SamplingRate   float64 `json:"sampling_rate" comment:"采样率 khz"`
	AudioMode      int     `json:"audio_mode" comment:"1 立体声 2双声道 3 单声道"`
	AudioRate      float64 `json:"audio_rate" comment:"音频码率"`
}

type MultiTransTemplate struct {
	models.Model
	TemplateName   string                    `json:"template_name" gorm:"type:varchar(100);comment:模版名称"`
	TemplateType   int                       `json:"template_type" gorm:"tinyint;comment:模版类型"`
	VideoCodec     int                       `json:"video_codec" gorm:"type:tinyint;comment:视频编码 1 h264 2h265"`
	BitrateControl int                       `json:"bitrate_control" gorm:"type:tinyint;comment:码率控制  1vbr 2cbr"`
	Frame          int                       `json:"frame" gorm:"type:tinyint;comment:帧结构 1IP 2IBP 3IBBP"`
	QualityMode    int                       `json:"quality_mode" gorm:"type:tinyint;comment:质量模式1高"`
	TcodeInsert    int                       `json:"tcode_insert" gorm:"type:tinyint;comment:时码插入 1 1080p"`
	AudioCodec     int                       `json:"audio_codec" gorm:"type:tinyint;comment:音频编码 1 aac 2 opus"`
	AudioMode      int                       `json:"audio_mode" gorm:"type:tinyint;comment:1 立体声 2双声道 3 单声道"`
	Profile        string                    `json:"profile" gorm:"type:varchar(50);comment:编码模版"`
	EntropyCoding  int                       `json:"entropy_coding" gorm:"type:tinyint;comment:熵编码 1CAVLC 2CABAC"`
	Rotate         int                       `json:"rotate" gorm:"type:tinyint;comment:画面旋转 1禁用 2顺时针旋转90度 3 180度 4逆时针90度"`
	Image          int                       `json:"image" gorm:"type:tinyint;comment:画面镜像 1启用 2禁用"`
	ImageType      int                       `json:"image_type" gorm:"type:tinyint;comment:画面镜像 1水平 2垂直"`
	VolumeMode     int                       `json:"volume_mode" gorm:"type:tinyint;comment:音量模式 1跟随源 2音量增益 3音量平衡"`
	VolumeGain     int                       `json:"volume_gain" gorm:"type:int;comment:音量增益"`
	QMin           int                       `json:"q_min" gorm:"type:int;comment:最小量化因子"`
	QMax           int                       `json:"q_max" gorm:"type:int;comment:最大量化因子"`
	Gop            int                       `json:"gop" gorm:"type:int;comment:gop"`
	ChildTemplates []MultiTransChildTemplate `json:"child_templates" gorm:"-"`
	models.ModelTime
	models.ControlBy
}

func (MultiTransTemplate) TableName() string {
	return "multi_trans_template"
}

type MultiTransChildTemplate struct {
	models.Model
	MultiTransId int     `json:"multi_trans_id" gorm:"type:bigint;comment:多码率模版id"`
	Width        int     `json:"width" gorm:"type:int;comment:宽"`
	High         int     `json:"high" gorm:"type:int;comment:高"`
	MaxBitrate   float64 `json:"max_bitrate" gorm:"type:float;comment:最高码率 mbps"`
	AvgBitrate   float64 `json:"avg_bitrate" gorm:"type:float;comment:平均码率 mbps"`
	FrameRate    float64 `json:"frame_rate" gorm:"type:float;comment:帧率"`
	SamplingRate float64 `json:"sampling_rate" gorm:"type:float;comment:采样率 kbps"`
	AudioRate    float64 `json:"audio_rate" gorm:"type:float;comment:音频码率"`
	Gop          int     `json:"gop" gorm:"type:int;comment:gop"`
	models.ModelTime
	models.ControlBy
}

type DeleteTransTaskReq struct {
	Id           int    `json:"id" comment:""`      //
	TaskId       string `json:"task_id" comment:""` //
	ForceOffline bool   `json:"forceoffline"`
}

type StartTransTaskReq struct {
	Id        int    `json:"id" comment:""`      //
	TaskId    string `json:"task_id" comment:""` //
	TaskState int    `json:"task_state" comment:""`
}

type StopTransTaskReq struct {
	Id        int    `json:"id" comment:""`      //
	TaskId    string `json:"task_id" comment:""` //
	TaskState int    `json:"task_state" comment:""`
}
